package gwtool.drucken;

import gwtool.container.DataSetItem;
import gwtool.container.GeraetItem;
import gwtool.container.PersonItem;
import gwtool.drucken.printable.AbstractPrintableItem;
import gwtool.drucken.printable.PrintableGereatItem;
import gwtool.drucken.printable.PrintableItem;
import gwtool.drucken.printable.PrintablePersonItem;

import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JOptionPane;

public class DruckItemListe extends AbstractPrintableItem implements Printable {

	private final int MAXLANEGE = 810;

	private List<PrintableItem> items;

	public DruckItemListe(List<DataSetItem> list) {

		items = new ArrayList<>();

		for (DataSetItem i : list) {

			if (i instanceof PersonItem) {
				items.add(new PrintablePersonItem((PersonItem) i));
			} else if (i instanceof GeraetItem) {
				items.add(new PrintableGereatItem((GeraetItem) i));
			} else {
				JOptionPane.showMessageDialog(null, "Drucken für " + i.getBezeichner() + " nicht implementiert!");
			}
		}

	}

	@Override
	public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {

		g.setFont(getFont(11));
		g.drawRoundRect(15, 15, 565, MAXLANEGE, 5, 5);
		int zeile = 30;
		g.drawString("Stand: " + fmt.format(new Date()), 25, zeile);
		g.drawLine(15, zeile + 2, 579, zeile + 2);
		zeile += 10;

		int zuMalenderEintrag = 0;

		int restZeilen = MAXLANEGE;
		boolean seiteMalen = false;
		for (int j = 0, page = 0; j < items.size(); j++) {

			restZeilen -= items.get(j).getLaenge(g) + 30;
			if (restZeilen < 0) {
				page++;
				restZeilen = MAXLANEGE;
				zuMalenderEintrag = j;
				j -= 1;
			}
			if (page == pageIndex) {
				seiteMalen = true;
				break;
			}

		}
		if (seiteMalen) {

			for (int i = zuMalenderEintrag; i < items.size() && MAXLANEGE - items.get(i).getLaenge(g) - zeile > 0; i++) {

				System.out.println(MAXLANEGE - items.get(i).getLaenge(g) - zeile);
				System.out.println(zeile);
				zeile = items.get(i).drawItem(g, zeile);
				System.out.println(zeile + " " + items.get(i).getLaenge(g) + "  "
						+ (MAXLANEGE - items.get(i).getLaenge(g) - zeile));
				System.out.println();
				zeile += 15;
				zeile += 15;
			}
			return Printable.PAGE_EXISTS;
		} else {
			return Printable.NO_SUCH_PAGE;
		}
	}

}
